The proliferation of client computing devices—such as smart phones and tablets—has significantly increased the complexity of the manner in which client software and server software communicate and work with one another. User demands for instant feedback and speed from software applications continue to increase as well, and are presenting new challenges for software developers. Consider, for example, a smart phone application that enables users to upload digital photographs and comment on one another's digital photographs. Designers of this application would, at least under conventional database design paradigms, configure a database for the application to include a separate table for each of the different types of data accessed by the application, e.g., a table for user accounts, a table for digital photographs binary data, and a table for digital photograph comments, where fields in the tables are tied to one another to establish relationships between the data.
In the above example, particular database operations—such as a deletion of a digital photograph from a user's account—require additional tasks to be executed, such as updating a global database index table, deleting all comments associated with the digital photograph, updating derived fields (e.g., an overall rating) associated with the digital photograph, etc., which can take a considerable amount of time to execute. Notably, under conventional design approaches, the client device sits idly and waits for an acknowledgement response from the server, which, problematically, is only issued by the server after all of the aforementioned tasks are completed on the server's end. As a result, the user often experiences confusion and frustration, and his or her overall experience is negatively impacted, which is unacceptable and should be avoided.